package com.ht.interfaces.service;

import javax.sql.DataSource;

import com.ht.api.db.DbConfig;
import com.ht.api.db.Entity;
import com.ht.api.db.StreamLoadConfig;
import com.ht.api.db.exception.HtException;
import com.ht.api.db.util.RedisUtil;

/**
 * 租户相关service
 * @author asq
 * @createTime 2025年4月14日 16:33:15
 */
public class TenantService {
    /**
     * 根据访问域名从缓存中获取租户对象
     * @param host
     * @return
     */
    public static Entity getTenant(String host) {
    	return RedisUtil.get("sys_tenant" + host);
    }
    
    /**
     * 根据访问域名获取租户数据源
     * @param host
     * @return
     */
    public static DataSource getDs(String host) {
    	Entity tenant = getTenant(host);

    	if (tenant == null) {
    		throw new HtException("租户未配置站点域名，无法获取数据源！");
    	}
    	return DbConfig.useTenantDb(tenant.getLong("main_id"));
    }

	/**
	 * 根据访问域名获取租户数据源
	 * @param host
	 * @return
	 */
	public static StreamLoadConfig getSLConfig(String host) {
		Entity tenant = getTenant(host);

		if (tenant == null) {
			throw new HtException("租户未配置站点域名，无法获取数据源！");
		}
		return DbConfig.useTenantSLC(tenant.getLong("main_id"));
	}

    /**
     * 根据访问域名从缓存中获取租户ID
     * @param host
     * @return
     */
    public static long getTenantId(String host) {
    	Entity tenant = getTenant(host);
    	if (tenant == null) {
    		throw new HtException("租户未配置站点域名，无法获取数据源！");
    	}
    	return tenant.getLong("main_id");
    }

}
